import java.util.*;
import java.lang.*;
import java.io.*;

//新的字符串split方法要求将分隔符也包含在数组中一并返回
//例如split("a?b?gf#e", "[?#]")应当返回[a,?,b,?,gf,#,e]
public class Example {
    public static void main(String args[]) {
        String s = "a?b?gf#e";
        String arr[] = split(s, "[?#]");
    }

    //基于vector的实现，编程相比不用vector简单一些，但效率较低
    //若要脱离vector，一个简单的思路是采取两次循环
    //在第一次循环中，将v.add全部替换为length++，从而计算出数组长度
    //在第二次循环中再将字符串填入数组
    public static String[] split(String s, String regex) {
        if (s.length() == 0) {
            String arr[] = new String[1];
            arr[0] = new String("");
            return arr;
        }
        Vector<String> v = new Vector<String>();
        String pack; //将字符包装为String，以便使用matches函数
        int beginIndex = 0, endIndex;
        for (endIndex = 0; endIndex < s.length(); endIndex++) {
            char ch = s.charAt(endIndex);
            pack = String.valueOf(ch);
            //发现分隔符
            if (pack.matches(regex)) {
                //第一个是分隔符或存在连续分隔符
                if (endIndex == beginIndex) {
                    //第一个是分隔符
                    if (beginIndex == 0) {
                        v.add(pack);
                    }
                    //连续分隔符
                    else {
                        v.add("");
                        v.add(pack);
                    }
                }
                else {
                    v.add(s.substring(beginIndex, endIndex));
                    v.add(pack);
                }
                beginIndex = endIndex + 1;
            }
        }
        //循环跳出，此时endIndex==s.length()
        //最后一个子串
        if (beginIndex != endIndex) v.add(s.substring(beginIndex, endIndex));
        String arr[] = new String[v.size()];
        for (int i = 0; i < v.size(); i++) arr[i] = v.elementAt(i);
        return arr;
    }
}